package gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import seminar.Seminar;
import editStudentGui.EditStudentLayeredPane;

@SuppressWarnings("serial")
public class GUI extends JFrame
{

	private JPanel contentPane;
	private static JLabel fehler_ausgabe_label;
	private static EditStudentLayeredPane edit_student_Pane = new EditStudentLayeredPane();
	private static Overview overview_layeredPane = new Overview();
	private static EditGroupsPane editGroupsPane;
	private static JTabbedPane tabbedPane;


	

	/**
	 * Create the frame.
	 */
	public GUI()
	{
		setIconImage(Toolkit
				.getDefaultToolkit()
				.getImage(
						GUI.class
								.getResource("/com/sun/java/swing/plaf/windows/icons/Computer.gif")));
		setTitle("Seminarverwaltung von den Java-Noobs");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 640, 480);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

		JPanel fehler_panel = new JPanel();
		contentPane.add(fehler_panel, BorderLayout.SOUTH);

		fehler_ausgabe_label = new JLabel("Status");
		fehler_panel.add(fehler_ausgabe_label);

		tabbedPane = new JTabbedPane(SwingConstants.TOP);
		contentPane.add(tabbedPane, BorderLayout.CENTER);

		tabbedPane.addChangeListener(new ChangeListener() {

			/**
			 * Wenn ein anderer Tab ausgewählt wurde, wird dieser, und auch nur
			 * dieser upgedated
			 */
			@Override
			public void stateChanged(ChangeEvent ce)
			{

				if (tabbedPane.getSelectedComponent().equals(editGroupsPane))
				{
					editGroupsPane.updateEditGroupsPane();
				}

				if (tabbedPane.getSelectedComponent().equals(edit_student_Pane))
				{
					edit_student_Pane.updateStudentTable();
				}
				if (tabbedPane.getSelectedComponent().equals(
						overview_layeredPane))
				{
					overview_layeredPane.updateTable();
				}

			}

		});

		tabbedPane.addTab("\u00DCbersicht", null, overview_layeredPane,
				"Übersicht der Studenten und aufteilung in Gruppen");

		tabbedPane
				.addTab("Studenten bearbeiten",
						null,
						edit_student_Pane,
						"Liste aller Studenten mit Möglichkeit Studenten zu Tauschen, Ändern und Löschen");

		JLayeredPane edit_rol_Pane = new EditRolePane();
		tabbedPane.addTab("Rollen bearbeiten", null, edit_rol_Pane,
				"Rollen verwalten und mit Kommentaren versehen");

		editGroupsPane = new EditGroupsPane();
		tabbedPane.addTab("Gruppen bearbeiten", null, editGroupsPane,
				"Die erstellten Gruppen bearbeiten");
	}

	/**
	 * Mit Timer der nach einer gewissen Zeit das Label zurücksetzt
	 */
	public static void statusausgabe(String fehlertext)
	{
		fehler_ausgabe_label.setText(fehlertext);

		TimerTask action = new TimerTask() {
			@Override
			public void run()
			{
				fehler_ausgabe_label.setText(" ");
			};
		};

		Timer caretaker = new Timer();
		caretaker.schedule(action, 10000);

	}

	/**
	 * Methode, die alle GUI-Klassen auffordert, sich neu zu zeichnen
	 */
	public static void updateAll()
	{
		edit_student_Pane.updateStudentTable();
		overview_layeredPane.updateTable();
		// editGroupsPane.updateEditGroupsPane();

	}
}
